可视化篇(二) 您所在的位置:网站首页 3d老虎图片 立体画图 可视化篇(二)

可视化篇(二)

2024-07-11 18:44| 来源: 网络整理| 查看: 265

可视化篇(二)———使用matplotlib绘制常用3D图形及案例 摘要(一)添加matplotlib 3D模块(二)3d图中绘制曲线(三)3d图中绘制散点图(四)3d图中绘制线框图(五)3d图中绘制曲面图(六)3d图中绘制三角表面图(七)3d图中绘制等高线(八)3d图中绘制条形图

摘要

本文通过学习matplotlib绘制3d图形的官方文档,总结了常用的3d图形,以及针对每类图形,通过一个小案例进行可视化。 官方文档

(一)添加matplotlib 3D模块

从工具箱中导入绘制3D图所需要的坐标轴模块。

from mpl_toolkits.mplot3d import Axes3D import matplotlib.pyplot as plt

绘制子图添加坐标轴时先申明绘制的类型为:3D (使用projection = "3d"进行申明)。

# 绘制子图添加坐标轴时先申明绘制的类型为:3D (使用projection = "3d"进行申明) fig = plt.figure() ax = fig.add_subplot(1,1,1,projection = "3d")

在这里插入图片描述

(二)3d图中绘制曲线

1、在3d坐标轴对象下使用plot方法。 2、其余参数同2d图。

# ************* 3d图中绘制曲线 ************* # 在3d坐标轴对象下使用plot方法 import numpy as np fig = plt.figure() ax1 = fig.add_subplot(1,1,1,projection = "3d") x = np.linspace(-10,10,100) y = np.linspace(-10,10,100) z = x**10 + y**3 ax1.plot(x,y,z,label = "3d curve") # 其余参数同2d图 ax1.legend() plt.show()

在这里插入图片描述

(三)3d图中绘制散点图

1、在3d坐标轴对象下使用scatter方法。 2、zdir为指定z轴方向,其余参数同2d绘图。

# ****************** 3d图中绘制散点图 ****************** # 在3d坐标轴对象下使用scatter方法 from mpl_toolkits.mplot3d import Axes3D import matplotlib.pyplot as plt fig = plt.figure() ax1 = fig.add_subplot(1,1,1,projection = "3d") from sklearn.datasets import make_blobs data = make_blobs(n_samples = 100,n_features = 3,cluster_std = 2) x = data[0][:,0] z = data[0][:,1] y = data[0][:,2] label = data[1] colors = "" for i in range(100): if label[i] == 0: colors += "r" elif label[i] == 1: colors += "g" else: colors += "b" ax1.scatter(x,y,z,zdir = "z",c = colors) # zdir为指定z轴方向,其余参数同2d绘图 ax1.set_xlabel("x") ax1.set_xlabel("y") ax1.set_xlabel("z")

在这里插入图片描述

(四)3d图中绘制线框图

1、在3d坐标轴对象下使用plot_wireframe方法。 2、Axes3D写作axes3d也可以。 3、X和Y需要是二维数组。 4、rcount:为沿行方向绘制网格的数目, ccount:为沿列方向绘制网格的数目。

# ****************** 3d图中绘制线框图 ****************** # 在3d坐标轴对象下使用plot_wireframe方法 from mpl_toolkits.mplot3d import axes3d # Axes3D写作axes3d也可以 import matplotlib.pyplot as plt import numpy as np fig = plt.figure(figsize=(16,8)) ax1 = fig.add_subplot(1,1,1,projection = "3d") x = np.linspace(-5,5,1000) y = np.linspace(-5,5,1000) X,Y = np.meshgrid(x,y) # X和Y需要是二维数组 Z = np.sin(np.sqrt(X**2+Y**2)) ax1.plot_wireframe(X,Y,Z,rcount = 15,ccount = 15) # rcount:为沿行方向绘制网格的数目,ccount:为沿列方向绘制网格的数目, plt.show()

在这里插入图片描述

(五)3d图中绘制曲面图

1、在3d坐标轴对象下使用plot_surface方法。 2、rcount:为沿行方向绘制网格的数目 ccount:为沿列方向绘制网格的数目 cmap:设定配色板(可直接调用matplotlib.cm中的配色板,如autumn,autumn_r,coolwarm等等) color:设定颜色

# ****************** 3d图中绘制曲面图 ****************** # 在3d坐标轴对象下使用plot_surface方法 from mpl_toolkits.mplot3d import axes3d # Axes3D写作axes3d也可以 import matplotlib.pyplot as plt from matplotlib import cm import numpy as np fig = plt.figure(figsize=(16,8)) ax1 = fig.add_subplot(1,1,1,projection = "3d") x = np.linspace(-5,5,1000) y = np.linspace(-5,5,1000) X,Y = np.meshgrid(x,y) # X和Y需要是二维数组 Z = np.sin(np.sqrt(X**2+Y**2)) surf = ax1.plot_surface(X, Y, Z, cmap=cm.autumn) """ 其余参数: rcount:为沿行方向绘制网格的数目 ccount:为沿列方向绘制网格的数目 cmap:设定配色板(可直接调用matplotlib.cm中的配色板,如autumn,autumn_r,coolwarm等等) color:设定颜色 """ fig.colorbar(surf, shrink=0.5, aspect=5) plt.show()

在这里插入图片描述

(六)3d图中绘制三角表面图

1、 在3d坐标轴对象下使用plot_trisurf方法。 2、以绘制莫比乌斯带为列。

# ****************** 3d图中绘制三角表面图 ****************** # 在3d坐标轴对象下使用plot_trisurf方法 from mpl_toolkits.mplot3d import axes3d import matplotlib.pyplot as plt import numpy as np from matplotlib import cm import matplotlib.tri as mtri # 以绘制莫比乌斯带为列 fig = plt.figure() ax1 = fig.add_subplot(1, 1, 1, projection='3d') x = np.linspace(0, 2*np.pi,100) y = np.linspace(-0.5, 0.5,20) x,y = np.meshgrid(x,y) # 将二维数组准换为一维数组 x = x.flatten() y = y.flatten() # 通过莫比乌斯映射,把x,y转化为X,Y,Z X = (1 + 0.5 * y * np.cos(x / 2.0)) * np.cos(x) Y = (1 + 0.5 * y * np.cos(x / 2.0)) * np.sin(x) Z = 0.5 * y * np.sin(x / 2.0) tri = mtri.Triangulation(x, y) ax1.plot_trisurf(X, Y, Z, triangles=tri.triangles, cmap=cm.coolwarm) ax1.set_zlim(-0.5, 0.5) plt.show()

在这里插入图片描述

(七)3d图中绘制等高线

1、 在3d坐标轴对象下使用contour方法。 2、绘制填充的等高线,使用contourf方法。 3、zdir:选定投影方向。 offset:选定投影方向的投影位置。

# ****************** 3d图中绘制等高线 ****************** # 在3d坐标轴对象下使用contour方法 # 绘制填充的等高线,使用contourf方法 from mpl_toolkits.mplot3d import axes3d # Axes3D写作axes3d也可以 import matplotlib.pyplot as plt from matplotlib import cm import numpy as np fig = plt.figure(figsize=(16,16)) # contour方法 ax1 = fig.add_subplot(2,1,1,projection = "3d") x = np.linspace(-5,5,1000) y = np.linspace(-5,5,1000) X,Y = np.meshgrid(x,y) # X和Y需要是二维数组 Z = np.sin(np.sqrt(X**2+Y**2)) surf = ax1.plot_surface(X, Y, Z,alpha = 0.3) ax1.contour(X, Y, Z, zdir='z', offset=-1.5, cmap=cm.coolwarm) ax1.contour(X, Y, Z, zdir='x', offset=-7, cmap=cm.coolwarm) ax1.contour(X, Y, Z, zdir='y', offset=7, cmap=cm.coolwarm) """ zdir:选定投影方向 offset:选定投影方向的投影位置 """ ax1.set_xlabel('X') ax1.set_xlim(-7, 7) ax1.set_ylabel('Y') ax1.set_ylim(-7, 7) ax1.set_zlabel('Z') ax1.set_zlim(-1.5, 1.5) # contourf方法 ax2 = fig.add_subplot(2,1,2,projection = "3d") surf = ax2.plot_surface(X, Y, Z,alpha = 0.3) ax2.contourf(X, Y, Z, zdir='z', offset=-1.5, cmap=cm.coolwarm) ax2.contourf(X, Y, Z, zdir='x', offset=-7, cmap=cm.coolwarm) ax2.contourf(X, Y, Z, zdir='y', offset=7, cmap=cm.coolwarm) """ zdir:选定投影方向 offset:选定投影方向的投影位置 """ ax2.set_xlabel('X') ax2.set_xlim(-7, 7) ax2.set_ylabel('Y') ax2.set_ylim(-7, 7) ax2.set_zlabel('Z') ax2.set_zlim(-1.5, 1.5) plt.show()

contour方法图形(等高线不填充): 在这里插入图片描述 contourf方法图形(等高线填充): 在这里插入图片描述

(八)3d图中绘制条形图

1、 在3d坐标轴对象下使用bar方法。 2、 left:表示条形图的横轴 height:表示条形图的纵轴 zdir:多组条形图的排列方向,即哪个轴 zs:多组条形图在排列方向上的位置

# ****************** 3d图中绘制条形图 ****************** # 在3d坐标轴对象下使用bar方法 from mpl_toolkits.mplot3d import axes3d import matplotlib.pyplot as plt import numpy as np fig = plt.figure(figsize=(16,16)) ax1 = fig.add_subplot(2,1,1,projection = "3d") np.random.seed(10) for color,z in zip(["r","g","b","k","y"],[0,10,20,30,40]): x = np.arange(10) y = np.abs(np.random.randn(10)) ax1.bar(left = x,height = y,zs = z,zdir = "z",color = color) """ left:表示条形图的横轴 height:表示条形图的纵轴 zdir:多组条形图的排列方向,即哪个轴 zs:多组条形图在排列方向上的位置 """ # 由此可知沿y轴排列会较为美观 ax2 = fig.add_subplot(2,1,2,projection = "3d") for color,z in zip(["r","g","b","k","y"],[0,10,20,30,40]): x = np.arange(10) y = np.abs(np.random.randn(10)) ax2.bar(left = x,height = y,zs = z,zdir = "y",color = color) """ left:表示条形图的横轴 height:表示条形图的纵轴 zdir:多组条形图的排列方向,即哪个轴 zs:多组条形图在排列方向上的位置 """ ax1.set_xlabel("x",size = 20) ax2.set_xlabel("x",size = 20) ax1.set_ylabel("y",size = 20) ax2.set_ylabel("y",size = 20) ax1.set_zlabel("z",size = 20) ax2.set_zlabel("z",size = 20) plt.show()

沿z轴排列图形: 在这里插入图片描述 沿y轴排列图形:(更为美观) 在这里插入图片描述 by CyrusMay 2020 05 07

你是一种感觉 写在夏夜晚风里面 ——————五月天(疯狂世界)——————



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有